package xyz.scootaloo.code.adt

/**
 * @author flutterdash@qq.com
 * @since 2021/11/9 18:39
 */

interface KIterator<E> {
    fun hasNext(): Boolean
    fun next(): E
}

interface KIterable<E> {
    fun iterator(): KIterator<E>
}

interface KCollection<E : Comparable<E>> : KIterable<E> {

    fun size(): Int

    /*
     * 清除集合中所有的元素
     */
    fun clear()

    /**
     * 向集合中插入一个元素
     *
     * @return 返回是否插入成功
     */
    fun add(element: E): Boolean

    /**
     * 删除一个集合中的元素
     *
     * @return 返回是否删除成功
     */
    fun remove(element: E): Boolean

    /**
     * @return 返回集合中是否包含此元素
     */
    fun contains(element: E): Boolean

    fun isEmpty(): Boolean = (size() == 0)
}

interface KList<E : Comparable<E>> : KCollection<E> {
    operator fun get(idx: Int): E
    operator fun set(idx: Int, element: E): E
    fun add(idx: Int, element: E)
    fun removeAt(idx: E)
    fun indexOf(element: E): Int
    fun lastIndexOf(element: E): Int
}
